package com.gimi.cloud.bbp.manage.service.prod.impl;

import com.gimi.cloud.bbp.common.enums.ResponseCodeEnum;
import com.gimi.cloud.bbp.common.exception.MsgException;
import com.gimi.cloud.bbp.common.utils.ReflectUtils;
import com.gimi.cloud.bbp.dao.dao.prod.EcProdBrandDao;
import com.gimi.cloud.bbp.dao.myMapper.core.query.QueryParam;
import com.gimi.cloud.bbp.dto.prod.EcProdBrandDTO;
import com.gimi.cloud.bbp.entity.prod.EcProdBrandEntity;
import com.gimi.cloud.bbp.manage.service.prod.EcProdBrandService;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 品牌相关接口实现类
 * @author lixj
 * @Description
 * @create 2017-12-19
 * @version 1.0
 **/
@Service
public class EcProdBrandServiceImpl implements EcProdBrandService {

    private final EcProdBrandDao ecProdBrandDao;

    @Autowired
    public EcProdBrandServiceImpl(EcProdBrandDao ecProdBrandDao) {
        this.ecProdBrandDao = ecProdBrandDao;
    }

    @Override
    public List<EcProdBrandDTO> queryList(EcProdBrandDTO dto, boolean isPaging) throws Exception {
        if(isPaging){
            PageHelper.startPage(dto.getPageNums(),dto.getPageSizes());
        }
        String sql = "SELECT epc.*,epb.prod_cat_id,epb.prod_cat_name " +
                " FROM ec_prod_brand epc " +
                " left join ec_category_brand_rela ecbr on epc.pd_id = ecbr.prod_brand_id " +
                " left join ec_prod_category epb on epb.is_delete = 0 AND epb.prod_cat_id = ecbr.prod_cat_id" +
                " WHERE epc.is_delete = 0" +
                "  AND epc.pd_id =:pdId AND epc.prod_brand_name LIKE '%'||:prodBrandName||'%'" +
                "  AND epc.prod_brand_desk = :prodBrandDesk AND epc.type=:type AND epb.prod_cat_name LIKE '%'||:prodCatName||'%'" +
                " ORDER BY epc.add_time desc";
        QueryParam queryParam = new QueryParam();
        queryParam.setSql(sql);
        queryParam.setParamObject(dto);
        return ecProdBrandDao.selectListDTOBySql(queryParam);
    }

    @Override
    public EcProdBrandDTO load(EcProdBrandDTO dto, Object id) throws Exception {
        EcProdBrandEntity ecProdBrandEntity = ecProdBrandDao.queryBy("pd_id",id);
        if(null == ecProdBrandEntity){
            return null;
        }
        EcProdBrandDTO ecProdBrandDTO = new EcProdBrandDTO();
        ReflectUtils.copyPropertiesIgnoreNullAndEmptyStr(ecProdBrandEntity,ecProdBrandDTO);
        return ecProdBrandDTO;
    }

    @Override
    public EcProdBrandDTO saveOrUpdate(EcProdBrandDTO dto) throws Exception {
        EcProdBrandEntity ecProdBrandEntity = null;
        if(null != dto.getPdId()){
            ecProdBrandEntity = ecProdBrandDao.queryBy("pd_id",dto.getPdId());
            if(null == ecProdBrandEntity){
                throw new MsgException(ResponseCodeEnum.NO_DATA,"未获取到主键为"+dto.getPdId()+"的品牌，更新失败");
            }
        }else{
            ecProdBrandEntity = new EcProdBrandEntity();
        }
        ReflectUtils.copyPropertiesIgnoreNullAndEmptyStr(dto,ecProdBrandEntity);
        if(null != dto.getPdId()){
            ecProdBrandDao.baseUpdateByPrimaryKey(ecProdBrandEntity);
        }else{
            ecProdBrandDao.baseInsert(ecProdBrandEntity);
        }
        ReflectUtils.copyPropertiesIgnoreNullAndEmptyStr(ecProdBrandEntity,dto);
        return dto;
    }

    @Override
    public int delete(EcProdBrandDTO dto, Object id, boolean realDel) throws Exception {
        EcProdBrandEntity ecProdBrandEntity = ecProdBrandDao.queryBy("pd_id",id);
        if(null != ecProdBrandEntity){
            throw new MsgException(ResponseCodeEnum.NO_DATA,"未获取到主键为"+dto.getPdId()+"的品牌，删除失败");
        }
        if(!realDel){
            ecProdBrandEntity.setUid(dto.getUid());
            ecProdBrandEntity.setUname(dto.getUname());
            ecProdBrandEntity.setIsDelete(1);
            return ecProdBrandDao.baseUpdateByPrimaryKey(ecProdBrandEntity);
        }
        return ecProdBrandDao.deleteByPrimaryKey(id);
    }

    @Override
    public int changeStatus(EcProdBrandDTO ecProdBrandDTO) throws Exception {
        EcProdBrandEntity ecProdBrandEntity = ecProdBrandDao.queryBy("pd_id",ecProdBrandDTO.getPdId());
        if(null == ecProdBrandEntity){
            throw new MsgException(ResponseCodeEnum.NO_DATA,"未获取到主键为"+ecProdBrandDTO.getPdId()+"的品牌，操作失败");
        }
        ecProdBrandEntity.setUid(ecProdBrandDTO.getUid());
        ecProdBrandEntity.setUname(ecProdBrandDTO.getUname());
        ecProdBrandEntity.setType(ecProdBrandDTO.getType());
        return ecProdBrandDao.baseUpdateByPrimaryKey(ecProdBrandEntity);
    }
}
